package com.project.gcsj5.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.project.gcsj5.model.Recommend;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * 推荐/书评数据访问接口
 * 提供对recommend表的基础CRUD及自定义操作
 */
@Mapper
public interface RecommendMapper extends BaseMapper<Recommend> {

    /**
     * 根据内容模糊查询推荐/书评
     * @param content 搜索内容关键词
     * @return 匹配的推荐列表
     * @warning 使用${}有SQL注入风险，建议改用CONCAT函数
     */
    @Select("SELECT * FROM recommend WHERE content LIKE '%${content}%'")
    List<Recommend> find_by_content(String content);

    /**
     * 获取浏览量最高的10条热门推荐
     * @return 热门推荐列表(按浏览量降序)
     */
    @Select("SELECT * FROM recommend ORDER BY view_sum DESC LIMIT 10")
    List<Recommend> find_hot_10();

    /**
     * 根据用户ID查询其所有推荐
     * @param id 用户ID
     * @return 该用户的推荐列表
     */
    @Select("SELECT * FROM recommend WHERE user_id = #{id}")
    List<Recommend> find_user_recommends(int id);

    /**
     * 查询所有推荐/书评
     * @return 全部推荐列表
     * @note 数据量大时应考虑分页查询
     */
    @Select("SELECT * FROM recommend")
    List<Recommend> find_recommends();

    /**
     * 根据ID获取单个推荐详情
     * @param id 推荐ID
     * @return 推荐详情对象
     */
    @Select("SELECT * FROM recommend WHERE id = #{id}")
    Recommend find_by_id_new(int id);

    /**
     * 增加推荐内容的浏览次数
     * @param id 推荐ID
     * @return 更新是否成功
     * @suggestion 返回int类型表示受影响行数更合适
     */
    @Update("UPDATE recommend SET view_sum = view_sum + 1 WHERE id = #{id}")
    Boolean add_view(int id);
}